#include <iostream>
#include <format>
#include <limits>

// 声明各个特性的演示函数
// 注意：有些在全局命名空间，有些在cpp23命名空间
void demonstrate_multidimensional_subscript();
void demonstrate_if_consteval();
void demonstrate_stacktrace();
void demonstrate_explicit_object_parameter();
void demonstrate_deducing_this();
void demonstrate_expected();

// 这些函数在cpp23命名空间中
namespace cpp23 {
void demonstrate_extended_attributes();
void demonstrate_auto_destructuring();
} // namespace cpp23

namespace cpp23 {

void demonstrate_features() {
    std::cout << "\n=== C++23 特性演示 ===\n";
    
    std::cout << "\n--- 多维下标运算符 ---\n";
    demonstrate_multidimensional_subscript();
    
    std::cout << "\n--- if consteval ---\n";
    demonstrate_if_consteval();
    
    std::cout << "\n--- 扩展属性 ---\n";
    cpp23::demonstrate_extended_attributes();
    
    std::cout << "\n--- 堆栈跟踪 ---\n";
    demonstrate_stacktrace();
    
    std::cout << "\n--- 显式对象参数 ---\n";
    demonstrate_explicit_object_parameter();
    
    std::cout << "\n--- deducing this ---\n";
    demonstrate_deducing_this();
    
    std::cout << "\n--- 自动解构 ---\n";
    cpp23::demonstrate_auto_destructuring();
    
    std::cout << "\n--- 期望值(std::expected) ---\n";
    demonstrate_expected();
    
    std::cout << "\n=== 演示结束 ===\n";
}

} // namespace cpp23

